#pragma once
#include"MyHashTable.h"
using namespace hash_bucket;
namespace bit {
	template<class K,class V>
	class MyMap {
		typedef HashNode<pair<K,V>> Node;

	public:
		struct MyKeyOfTMap {
			const K& operator()(const pair<K, V>& kv) {
				return kv.first;
			}
		};

		MyMap() = default;
		~MyMap() {
			_map.~HashTable();
		}
		bool Insert(const pair<K, V>& kv) {
			return _map.Insert(kv);
		}
		bool Find(const K& k) {
			return _map.Find(k);
		}
		bool Erase(const K& k) {
			return _map.Erase(k);
		}
		void Printf() {
			auto tables = _map.GetVector();
			for (auto x : tables) {
				auto cur = x;
				if (!cur)
					cout << "nullptr";
				while (cur) {
					cout <<'('<<cur->_data.first << ' ' << cur->_data.second <<')'<<' ';
					cur = cur->_next;
				}
				cout << endl;
			}
		}
	private:
		HashTable<K, pair<K,V>, MyKeyOfTMap> _map;
	};
} 